
r = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

global.Buffer = global.Buffer || require('buffer').Buffer;

if (typeof btoa === 'undefined') {
  global.btoa = function (str) {
    return new Buffer(str, 'binary').toString('base64');
  };
}

if (typeof atob === 'undefined') {
  global.atob = function (b64Encoded) {
    return new Buffer(b64Encoded, 'base64').toString('binary');
  };
}

// 定义a
function a(e) {
    var t, a, n, s, i, o;
    for (n = e.length,
             a = 0,
             t = ""; a < n;) {
        if (s = 255 & e.charCodeAt(a++),
            a == n) {
            t += r.charAt(s >> 2),
                t += r.charAt((3 & s) << 4),
                t += "==";
            break
        }
        if (i = e.charCodeAt(a++),
            a == n) {
            t += r.charAt(s >> 2),
                t += r.charAt((3 & s) << 4 | (240 & i) >> 4),
                t += r.charAt((15 & i) << 2),
                t += "=";
            break
        }
        o = e.charCodeAt(a++),
            t += r.charAt(s >> 2),
            t += r.charAt((3 & s) << 4 | (240 & i) >> 4),
            t += r.charAt((15 & i) << 2 | (192 & o) >> 6),
            t += r.charAt(63 & o)
    }
    return t
};

// 定义s
function s(e) {
    var t, a, n, s;
    for (t = "",
             n = e.length,
             a = 0; a < n; a++)
        s = e.charCodeAt(a),
            s >= 1 && s <= 127 ? t += e.charAt(a) : s > 2047 ? (t += String.fromCharCode(224 | s >> 12 & 15),
                t += String.fromCharCode(128 | s >> 6 & 63),
                t += String.fromCharCode(128 | s >> 0 & 63)) : (t += String.fromCharCode(192 | s >> 6 & 31),
                t += String.fromCharCode(128 | s >> 0 & 63));
    return t
};

//定义base64 encode
function encode(e) {

    result = a(s( e ));

    requestPayload = {

        "requestPayload": result

    };

    res = JSON.stringify(requestPayload);
    return res

};

//定义i
function i(e) {

    for (var t = e.length; t < 24; t++)
        e += "0";
    return e
};

//定义ss
function ss(e, t, a) {
    return {
        key: i(e.slice(t, a)),
        vector: 1
    }
}

//定义n
function n(e) {
    for (var t, a, n, s = new Array(0, 4, 536870912, 536870916, 65536, 65540, 536936448, 536936452, 512, 516, 536871424, 536871428, 66048, 66052, 536936960, 536936964), i = new Array(0, 1, 1048576, 1048577, 67108864, 67108865, 68157440, 68157441, 256, 257, 1048832, 1048833, 67109120, 67109121, 68157696, 68157697), r = new Array(0, 8, 2048, 2056, 16777216, 16777224, 16779264, 16779272, 0, 8, 2048, 2056, 16777216, 16777224, 16779264, 16779272), o = new Array(0, 2097152, 134217728, 136314880, 8192, 2105344, 134225920, 136323072, 131072, 2228224, 134348800, 136445952, 139264, 2236416, 134356992, 136454144), l = new Array(0, 262144, 16, 262160, 0, 262144, 16, 262160, 4096, 266240, 4112, 266256, 4096, 266240, 4112, 266256), c = new Array(0, 1024, 32, 1056, 0, 1024, 32, 1056, 33554432, 33555456, 33554464, 33555488, 33554432, 33555456, 33554464, 33555488), d = new Array(0, 268435456, 524288, 268959744, 2, 268435458, 524290, 268959746, 0, 268435456, 524288, 268959744, 2, 268435458, 524290, 268959746), u = new Array(0, 65536, 2048, 67584, 536870912, 536936448, 536872960, 536938496, 131072, 196608, 133120, 198656, 537001984, 537067520, 537004032, 537069568), m = new Array(0, 262144, 0, 262144, 2, 262146, 2, 262146, 33554432, 33816576, 33554432, 33816576, 33554434, 33816578, 33554434, 33816578), h = new Array(0, 268435456, 8, 268435464, 0, 268435456, 8, 268435464, 1024, 268436480, 1032, 268436488, 1024, 268436480, 1032, 268436488), f = new Array(0, 32, 0, 32, 1048576, 1048608, 1048576, 1048608, 8192, 8224, 8192, 8224, 1056768, 1056800, 1056768, 1056800), p = new Array(0, 16777216, 512, 16777728, 2097152, 18874368, 2097664, 18874880, 67108864, 83886080, 67109376, 83886592, 69206016, 85983232, 69206528, 85983744), b = new Array(0, 4096, 134217728, 134221824, 524288, 528384, 134742016, 134746112, 16, 4112, 134217744, 134221840, 524304, 528400, 134742032, 134746128), v = new Array(0, 4, 256, 260, 0, 4, 256, 260, 1, 5, 257, 261, 1, 5, 257, 261), g = e.length > 8 ? 3 : 1, x = new Array(32 * g), T = new Array(0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0), y = 0, w = 0, C = 0; C < g; C++) {
        var _ = e.charCodeAt(y++) << 24 | e.charCodeAt(y++) << 16 | e.charCodeAt(y++) << 8 | e.charCodeAt(y++)
            , M = e.charCodeAt(y++) << 24 | e.charCodeAt(y++) << 16 | e.charCodeAt(y++) << 8 | e.charCodeAt(y++);
        n = 252645135 & (_ >>> 4 ^ M),
            M ^= n,
            _ ^= n << 4,
            n = 65535 & (M >>> -16 ^ _),
            _ ^= n,
            M ^= n << -16,
            n = 858993459 & (_ >>> 2 ^ M),
            M ^= n,
            _ ^= n << 2,
            n = 65535 & (M >>> -16 ^ _),
            _ ^= n,
            M ^= n << -16,
            n = 1431655765 & (_ >>> 1 ^ M),
            M ^= n,
            _ ^= n << 1,
            n = 16711935 & (M >>> 8 ^ _),
            _ ^= n,
            M ^= n << 8,
            n = 1431655765 & (_ >>> 1 ^ M),
            M ^= n,
            _ ^= n << 1,
            n = _ << 8 | M >>> 20 & 240,
            _ = M << 24 | M << 8 & 16711680 | M >>> 8 & 65280 | M >>> 24 & 240,
            M = n;
        for (var S = 0; S < T.length; S++)
            T[S] ? (_ = _ << 2 | _ >>> 26,
                M = M << 2 | M >>> 26) : (_ = _ << 1 | _ >>> 27,
                M = M << 1 | M >>> 27),
                _ &= -15,
                M &= -15,
                t = s[_ >>> 28] | i[_ >>> 24 & 15] | r[_ >>> 20 & 15] | o[_ >>> 16 & 15] | l[_ >>> 12 & 15] | c[_ >>> 8 & 15] | d[_ >>> 4 & 15],
                a = u[M >>> 28] | m[M >>> 24 & 15] | h[M >>> 20 & 15] | f[M >>> 16 & 15] | p[M >>> 12 & 15] | b[M >>> 8 & 15] | v[M >>> 4 & 15],
                n = 65535 & (a >>> 16 ^ t),
                x[w++] = t ^ n,
                x[w++] = a ^ n << 16
    }
    return x
}

//定义aa
function aa(e, t, a, s, i, r) {
    a && (t = unescape(encodeURIComponent(t)));
    var o, l, c, d, u, m, h, f, p, b, v, g, x, T,
        y = new Array(16843776, 0, 65536, 16843780, 16842756, 66564, 4, 65536, 1024, 16843776, 16843780, 1024, 16778244, 16842756, 16777216, 4, 1028, 16778240, 16778240, 66560, 66560, 16842752, 16842752, 16778244, 65540, 16777220, 16777220, 65540, 0, 1028, 66564, 16777216, 65536, 16843780, 4, 16842752, 16843776, 16777216, 16777216, 1024, 16842756, 65536, 66560, 16777220, 1024, 4, 16778244, 66564, 16843780, 65540, 16842752, 16778244, 16777220, 1028, 66564, 16843776, 1028, 16778240, 16778240, 0, 65540, 66560, 0, 16842756),
        w = new Array(-2146402272, -2147450880, 32768, 1081376, 1048576, 32, -2146435040, -2147450848, -2147483616, -2146402272, -2146402304, -2147483648, -2147450880, 1048576, 32, -2146435040, 1081344, 1048608, -2147450848, 0, -2147483648, 32768, 1081376, -2146435072, 1048608, -2147483616, 0, 1081344, 32800, -2146402304, -2146435072, 32800, 0, 1081376, -2146435040, 1048576, -2147450848, -2146435072, -2146402304, 32768, -2146435072, -2147450880, 32, -2146402272, 1081376, 32, 32768, -2147483648, 32800, -2146402304, 1048576, -2147483616, 1048608, -2147450848, -2147483616, 1048608, 1081344, 0, -2147450880, 32800, -2147483648, -2146435040, -2146402272, 1081344),
        C = new Array(520, 134349312, 0, 134348808, 134218240, 0, 131592, 134218240, 131080, 134217736, 134217736, 131072, 134349320, 131080, 134348800, 520, 134217728, 8, 134349312, 512, 131584, 134348800, 134348808, 131592, 134218248, 131584, 131072, 134218248, 8, 134349320, 512, 134217728, 134349312, 134217728, 131080, 520, 131072, 134349312, 134218240, 0, 512, 131080, 134349320, 134218240, 134217736, 512, 0, 134348808, 134218248, 131072, 134217728, 134349320, 8, 131592, 131584, 134217736, 134348800, 134218248, 520, 134348800, 131592, 8, 134348808, 131584),
        _ = new Array(8396801, 8321, 8321, 128, 8396928, 8388737, 8388609, 8193, 0, 8396800, 8396800, 8396929, 129, 0, 8388736, 8388609, 1, 8192, 8388608, 8396801, 128, 8388608, 8193, 8320, 8388737, 1, 8320, 8388736, 8192, 8396928, 8396929, 129, 8388736, 8388609, 8396800, 8396929, 129, 0, 0, 8396800, 8320, 8388736, 8388737, 1, 8396801, 8321, 8321, 128, 8396929, 129, 1, 8192, 8388609, 8193, 8396928, 8388737, 8193, 8320, 8388608, 8396801, 128, 8388608, 8192, 8396928),
        M = new Array(256, 34078976, 34078720, 1107296512, 524288, 256, 1073741824, 34078720, 1074266368, 524288, 33554688, 1074266368, 1107296512, 1107820544, 524544, 1073741824, 33554432, 1074266112, 1074266112, 0, 1073742080, 1107820800, 1107820800, 33554688, 1107820544, 1073742080, 0, 1107296256, 34078976, 33554432, 1107296256, 524544, 524288, 1107296512, 256, 33554432, 1073741824, 34078720, 1107296512, 1074266368, 33554688, 1073741824, 1107820544, 34078976, 1074266368, 256, 33554432, 1107820544, 1107820800, 524544, 1107296256, 1107820800, 34078720, 0, 1074266112, 1107296256, 524544, 33554688, 1073742080, 524288, 0, 1074266112, 34078976, 1073742080),
        S = new Array(536870928, 541065216, 16384, 541081616, 541065216, 16, 541081616, 4194304, 536887296, 4210704, 4194304, 536870928, 4194320, 536887296, 536870912, 16400, 0, 4194320, 536887312, 16384, 4210688, 536887312, 16, 541065232, 541065232, 0, 4210704, 541081600, 16400, 4210688, 541081600, 536870912, 536887296, 16, 541065232, 4210688, 541081616, 4194304, 16400, 536870928, 4194304, 536887296, 536870912, 16400, 536870928, 541081616, 4210688, 541065216, 4210704, 541081600, 0, 541065232, 16, 16384, 541065216, 4210704, 16384, 4194320, 536887312, 0, 541081600, 536870912, 4194320, 536887312),
        D = new Array(2097152, 69206018, 67110914, 0, 2048, 67110914, 2099202, 69208064, 69208066, 2097152, 0, 67108866, 2, 67108864, 69206018, 2050, 67110912, 2099202, 2097154, 67110912, 67108866, 69206016, 69208064, 2097154, 69206016, 2048, 2050, 69208066, 2099200, 2, 67108864, 2099200, 67108864, 2099200, 2097152, 67110914, 67110914, 69206018, 69206018, 2, 2097154, 67108864, 67110912, 2097152, 69208064, 2050, 2099202, 69208064, 2050, 67108866, 69208066, 69206016, 2099200, 0, 2, 69208066, 0, 2099202, 69206016, 2048, 67108866, 67110912, 2048, 2097154),
        k = new Array(268439616, 4096, 262144, 268701760, 268435456, 268439616, 64, 268435456, 262208, 268697600, 268701760, 266240, 268701696, 266304, 4096, 64, 268697600, 268435520, 268439552, 4160, 266240, 262208, 268697664, 268701696, 4160, 0, 0, 268697664, 268435520, 268439552, 266304, 262144, 266304, 262144, 268701696, 4096, 64, 268697664, 4096, 266304, 268439552, 64, 268435520, 268697600, 268697664, 268435456, 262144, 268439616, 0, 268701760, 262208, 268435520, 268697600, 268439552, 268439616, 0, 268701760, 266240, 266240, 4160, 4160, 262208, 268435456, 268701696),
        A = n(e), V = 0, N = t.length, F = 0, I = 32 == A.length ? 3 : 9;
    f = 3 == I ? a ? new Array(0, 32, 2) : new Array(30, -2, -2) : a ? new Array(0, 32, 2, 62, 30, -2, 64, 96, 2) : new Array(94, 62, -2, 32, 64, 2, 30, -2, -2),
        2 == r ? t += "        " : 1 == r ? a && (c = 8 - N % 8,
            t += String.fromCharCode(c, c, c, c, c, c, c, c),
        8 === c && (N += 8)) : r || (t += "\0\0\0\0\0\0\0\0");
    var L = ""
        , H = "";
    for (1 == s && (p = i.charCodeAt(V++) << 24 | i.charCodeAt(V++) << 16 | i.charCodeAt(V++) << 8 | i.charCodeAt(V++),
        v = i.charCodeAt(V++) << 24 | i.charCodeAt(V++) << 16 | i.charCodeAt(V++) << 8 | i.charCodeAt(V++),
        V = 0); V < N;) {
        for (m = t.charCodeAt(V++) << 24 | t.charCodeAt(V++) << 16 | t.charCodeAt(V++) << 8 | t.charCodeAt(V++),
                 h = t.charCodeAt(V++) << 24 | t.charCodeAt(V++) << 16 | t.charCodeAt(V++) << 8 | t.charCodeAt(V++),
             1 == s && (a ? (m ^= p,
                 h ^= v) : (b = p,
                 g = v,
                 p = m,
                 v = h)),
                 c = 252645135 & (m >>> 4 ^ h),
                 h ^= c,
                 m ^= c << 4,
                 c = 65535 & (m >>> 16 ^ h),
                 h ^= c,
                 m ^= c << 16,
                 c = 858993459 & (h >>> 2 ^ m),
                 m ^= c,
                 h ^= c << 2,
                 c = 16711935 & (h >>> 8 ^ m),
                 m ^= c,
                 h ^= c << 8,
                 c = 1431655765 & (m >>> 1 ^ h),
                 h ^= c,
                 m ^= c << 1,
                 m = m << 1 | m >>> 31,
                 h = h << 1 | h >>> 31,
                 l = 0; l < I; l += 3) {
            for (x = f[l + 1],
                     T = f[l + 2],
                     o = f[l]; o != x; o += T)
                d = h ^ A[o],
                    u = (h >>> 4 | h << 28) ^ A[o + 1],
                    c = m,
                    m = h,
                    h = c ^ (w[d >>> 24 & 63] | _[d >>> 16 & 63] | S[d >>> 8 & 63] | k[63 & d] | y[u >>> 24 & 63] | C[u >>> 16 & 63] | M[u >>> 8 & 63] | D[63 & u]);
            c = m,
                m = h,
                h = c
        }
        m = m >>> 1 | m << 31,
            h = h >>> 1 | h << 31,
            c = 1431655765 & (m >>> 1 ^ h),
            h ^= c,
            m ^= c << 1,
            c = 16711935 & (h >>> 8 ^ m),
            m ^= c,
            h ^= c << 8,
            c = 858993459 & (h >>> 2 ^ m),
            m ^= c,
            h ^= c << 2,
            c = 65535 & (m >>> 16 ^ h),
            h ^= c,
            m ^= c << 16,
            c = 252645135 & (m >>> 4 ^ h),
            h ^= c,
            m ^= c << 4,
        1 == s && (a ? (p = m,
            v = h) : (m ^= b,
            h ^= g)),
            H += String.fromCharCode(m >>> 24, m >>> 16 & 255, m >>> 8 & 255, 255 & m, h >>> 24, h >>> 16 & 255, h >>> 8 & 255, 255 & h),
            F += 8,
        512 == F && (L += H,
            H = "",
            F = 0)
    }
    if (L += H,
            L = L.replace(/\0*$/g, ""),
            !a) {
        if (1 === r) {
            var N = L.length
                , E = 0;
            N && (E = L.charCodeAt(N - 1)),
            E <= 8 && (L = L.substring(0, N - E))
        }
        L = decodeURIComponent(escape(L))
    }
    return L
}

function encrypt(e, t) {

    e = "GTO2OINTERFACE2017#@!%88";

    var n = ss(e, 0, 24);

    return btoa(aa(n.key, t, 1, 0, "12345678", 1)).replace(/\s/g, "");
}


function genPackageList( data ) {

    var pack = {

        packageList:{
            packages:{
                header:{
                    requestType:"RHCALCULATION",
                    comId:"GTO2O20170118",
                    from:"iwechat",
                    sendTime:new Date().format("yyyy-MM-dd hh:mm:ss"),
                    orderSerial:"orderId",
                    comSerial:"comSerial"
                },
                request:encrypt("", encode(data))
            }
        }
    };
    return pack
};

//JS生成当前时间函数
Date.prototype.format = function(fmt) {
     var o = {
        "M+" : this.getMonth()+1,                 //月份
        "d+" : this.getDate(),                    //日
        "h+" : this.getHours(),                   //小时
        "m+" : this.getMinutes(),                 //分
        "s+" : this.getSeconds(),                 //秒
        "q+" : Math.floor((this.getMonth()+3)/3), //季度
        "S"  : this.getMilliseconds()             //毫秒
    };
    if(/(y+)/.test(fmt)) {
            fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
    }
     for(var k in o) {
        if(new RegExp("("+ k +")").test(fmt)){
             fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
         }
     }
    return fmt;
};



var data = '{"base":{"NAmt":"100000","CInsuYear":"106","CFinTyp":"0","NPayTime":"1","CArea":"310000","CProdNo":"990002","CInsuYearFlag":"A"},"applicant":{"TBirthday":"","CSex":"m"},"insured":{"TBirthday":"1990-01-01","CSex":"m","CCusLvl":"1"},"cvrgList":[{"CCvrgNo":"301002","CCustCvrgNme":"重大疾病保险（B款）","NAmt":"100000","CProdNo":"300002","CNmeCn":"重大疾病保险（B款）","NDductAmt":""}],"prodList":[{"CProdNo":"300002","CProdName":"瑞华终身重大疾病保险","CFinTyp":"0","NPayTime":"1","CInsuYear":"106","CInsuYearFlag":"A","NHsttPrd":15,"NDssWtPrd":180,"CRdrProd":"0","NGrntExtInsr":-2,"CAutoPadding":"1"}]}'

result = genPackageList( data );
console.log( result );